package demo;

public class Student {
    //实例成员变量 (与实例代码块相比较谁的代码位置靠前先执行谁，按顺序执行)
    public String name;                            //非静态实例成员变量，属于具体对象
    public int age;

    //静态成员变量
    public static String ClassRoom = "java";       //就地初始化为javaClass 静态成员变量与静态代码块按代码先后顺序执行，static修饰成为“静态成员变量(类变量)”，不属于具体的对象，所有对象共享






    //静态代码块(最先被执行,在加载类的时候就已经被执行了,多个静态代码块会被合并执行,不管生成多少个对象只会被执行一次)
    static {
        ClassRoom = "java01";
        System.out.println("静态代码被执行了....");
    }

    public Student(){
        System.out.println("不带参数的构造方法被执行了....");
    }

    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("带2个参数的构造方法被执行了....");
    }





    //实例代码块(构造块):在静态代码块后执行,只有在创建对象时才会被执行,在方法外类的里面,初始化实例成员变量,比构造方法“先执行”与两者代码先后顺序和构造方法是否带参数无关
    {
        this.name = "bit";
        this.age = 6;
        System.out.println("实例代码块被执行了....");
    }






    public void doClass(){                //无static的非静态成员方法
        ClassRoom = "";                   //非静态成员方法可以调用静态的内容如(ClassRoom、getClassRoom)
        System.out.println("学生在上课");
    }

    public static String getClassRoom(){  //static修饰的静态方法(不依赖于对象，不能调用非静态的内容如：name、age、doClass)
        Student student = new Student();  //如果要调用则需要new对象
        student.doClass();
        return ClassRoom;
    }
}
